{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# K-Means Clustering for Default Boxes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-05-28T08:25:35.382484Z",
     "start_time": "2020-05-28T08:25:34.847301Z"
    }
   },
   "outputs": [],
   "source": [
    "import glob\n",
    "import os\n",
    "import matplotlib.pyplot as plt\n",
    "import cv2\n",
    "import numpy as np\n",
    "import xml.etree.ElementTree as ET\n",
    "from random import randint\n",
    "from sklearn.cluster import KMeans"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-05-28T08:25:41.216823Z",
     "start_time": "2020-05-28T08:25:40.895249Z"
    }
   },
   "outputs": [],
   "source": [
    "obd_src = glob.glob(\"../../bdd100k/bdd100k/images/100k/train/*.jpg\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-05-28T08:25:43.740700Z",
     "start_time": "2020-05-28T08:25:43.492953Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "80421\n"
     ]
    }
   ],
   "source": [
    "obd_name = []\n",
    "\n",
    "num_obd = 0\n",
    "\n",
    "for obd in obd_src:\n",
    "    num_obd += 1\n",
    "    obd_basename = os.path.basename(obd)\n",
    "    obd_onlyname = os.path.splitext(obd_basename)\n",
    "\n",
    "    obd_name.append(obd_onlyname[0])\n",
    "    \n",
    "print(num_obd)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-05-27T04:52:56.412699Z",
     "start_time": "2020-05-27T04:52:56.393472Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Num of Objs:  1728622\n"
     ]
    }
   ],
   "source": [
    "img_info = []\n",
    "\n",
    "for name in obd_name:\n",
    "    xml_path = \"../../bdd100k/bdd100k/xml/train/\" + name + \".xml\"\n",
    "\n",
    "    with open(xml_path, \"r\") as new_f:\n",
    "        root = ET.parse(xml_path).getroot()\n",
    "        for obj in root.findall('object'):\n",
    "            obj_name = obj.find('name').text\n",
    "            # if obj_name == \"person\":\n",
    "            bndbox = obj.find('bndbox')\n",
    "            left = bndbox.find('xmin').text\n",
    "            top = bndbox.find('ymin').text\n",
    "            right = bndbox.find('xmax').text\n",
    "            bottom = bndbox.find('ymax').text\n",
    "\n",
    "            img_info.append([obj_name, left, top, right, bottom])\n",
    "\n",
    "print(\"Num of Objs: \", len(img_info))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "box_w = []\n",
    "box_h = []\n",
    "\n",
    "for box in img_info:\n",
    "    box_w.append(int(box[3]) - int(box[1]))\n",
    "    box_h.append(int(box[4]) - int(box[2]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[14, 91, 6, 178, 13, 12, 10, 12, 35, 18]\n"
     ]
    }
   ],
   "source": [
    "print(box_w[:10])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1728622,)\n",
      "(1728622,)\n"
     ]
    }
   ],
   "source": [
    "print(np.array(box_w).shape)\n",
    "print(np.array(box_h).shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [],
   "source": [
    "box_sizes = []\n",
    "\n",
    "for i in range(len(box_w)):\n",
    "    box_sizes.append((int(box_w[i]), int(box_h[i])))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [],
   "source": [
    "box_sizes_array = np.array(box_sizes)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1728622, 2)\n"
     ]
    }
   ],
   "source": [
    "print(box_sizes_array.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x7fa7e8f865f8>"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(box_sizes_array[:,0], box_sizes_array[:,1], label='True Position')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "KMeans(n_clusters=6)"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "kmeans = KMeans(n_clusters=6)\n",
    "kmeans.fit(box_sizes_array)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 61.71258844  60.47579592]\n",
      " [289.35529204 179.17602901]\n",
      " [ 21.96325564  22.79405422]\n",
      " [151.11738297  94.1544037 ]\n",
      " [428.62636074 354.0335961 ]\n",
      " [129.39122008 226.6351673 ]]\n"
     ]
    }
   ],
   "source": [
    "print(kmeans.cluster_centers_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
